﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DataAccessComponents;
using BusinessLogicLayer;
using System.Collections.ObjectModel;

namespace inzDesktop
{
    /// <summary>
    /// Interaction logic for windowSzczegolyRezerwacji.xaml
    /// </summary>
    public partial class windowSzczegolyRezerwacji : Window
    {
        // Klienci z rezerwacji do usunięcia
        ObservableCollection<Klient_Rezerwacja> klientRezerwacjaDoUsuniecia = new ObservableCollection<Klient_Rezerwacja>();

        public windowSzczegolyRezerwacji()
        {
            InitializeComponent();
        }

        public void inicjalizujZawartosc(int idrezerwacja)
        {
            RezerwacjaBL rezerwacjaBL = new RezerwacjaBL();
            Rezerwacja rezerwacja = rezerwacjaBL.pobierz(idrezerwacja);
            rezerwacja.Czy_zmiana = false;
            this.DataContext = rezerwacja;           
 
            // Tytuł okna rezerwacji
            this.Title = string.Format("Rezerwacja {0}", rezerwacja.Numer_rezerwacji);

            // Status
            string[] status = { "potwierdzona", "niepotwierdzone" };
            cbStatusRezerwacja.ItemsSource = status;
        }

        private void dataGridListaKlientow_Loaded(object sender, RoutedEventArgs e)
        {
            Klient_RezerwacjaBL klient_rezerwacjaBL = new Klient_RezerwacjaBL();
            Rezerwacja rezerwacja = (this.DataContext as Rezerwacja);
            dataGridListaKlientow.ItemsSource = klient_rezerwacjaBL.pobierzListe(rezerwacja.Id_rezerwacja);
            // Czyszczenie listy pozycji do usunięcia
            klientRezerwacjaDoUsuniecia.Clear();
        }

        

        private void btnZmienHotel_Click(object sender, RoutedEventArgs e)
        {
            windowZmienHotel wzh = new windowZmienHotel();
            wzh.ShowDialog();

            if (wzh.DialogResult.Value == true)
            {
                Rezerwacja rezerwacja = (Rezerwacja)this.DataContext;
                rezerwacja.Termin.Oferta.Hotel = wzh.Hotel;
                tbHotel.Text = wzh.Hotel.Nazwa;
                tbHotelSC.Text = wzh.Hotel.Nazwa;
                this.DataContext = rezerwacja;
            }           
        }

        private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            if (((Rezerwacja)this.DataContext).Czy_zmiana == true)
            {
                System.Windows.MessageBoxResult wynik = System.Windows.MessageBox.Show("Czy zapisać zmiany?", "Uwaga!", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
                if (wynik == MessageBoxResult.Yes)
                {
                    zapiszZmianyRezerwacja();
                    zapiszKlientowRezerwacji();
                    this.Close();
                }
                else if (wynik == MessageBoxResult.No)
                {
                    this.Close();
                }
            }
            else
                this.Close();
        }

        private void zapiszZmianyRezerwacja()
        {
            RezerwacjaBL rezerwacjaBL = new RezerwacjaBL();
            Rezerwacja rezerwacja = this.DataContext as Rezerwacja;
            rezerwacjaBL.aktualizuj(rezerwacja);
        }

        private void zapiszKlientowRezerwacji()
        {
            Klient_RezerwacjaBL klient_rezerwacjaBL = new Klient_RezerwacjaBL();

            ObservableCollection<Klient_Rezerwacja> klienciRezerwacja = dataGridListaKlientow.ItemsSource as ObservableCollection<Klient_Rezerwacja>;
            klient_rezerwacjaBL.aktualizujListe(klienciRezerwacja);

            // usuwanie wpisów
            klient_rezerwacjaBL.usun(klientRezerwacjaDoUsuniecia);
        }
            

        private void btnAnuluj_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnZapisz_Click(object sender, RoutedEventArgs e)
        {
            zapiszZmianyRezerwacja();
            zapiszKlientowRezerwacji();
            System.Windows.MessageBox.Show("Zmiany zapisane pomyślnie", "Sukces", MessageBoxButton.OK, MessageBoxImage.Information);
        }

        private void btnZmienTermin_Click(object sender, RoutedEventArgs e)
        {
            windowListaTerminow wlt = new windowListaTerminow();
            Rezerwacja rezerwacja = (this.DataContext as Rezerwacja);

            wlt.inicjalizujZawartosc(rezerwacja.Termin.Oferta.Id_oferta);
            wlt.ShowDialog();

            if (wlt.DialogResult.Value == true)
            {
                rezerwacja.Termin = wlt.Termin;
                rezerwacja.Id_termin = wlt.Termin.Id_termin;

                string term = String.Format("{0:dd-MM-yyyy} - {1:dd-MM-yyyy}",rezerwacja.Termin.Data_rozpoczecia,rezerwacja.Termin.Data_zakonczenia);
                tbTermin.Text = term;
                tbTerminSC.Text = term;
            }
        }

        private void btnDodajNowego_Click(object sender, RoutedEventArgs e)
        {
            windowDodajKlienta wdk = new windowDodajKlienta();
            wdk.ShowDialog();

            if (wdk.DialogResult.Value == true)
            {
                ObservableCollection<Klient_Rezerwacja> klienciRezerwacja = dataGridListaKlientow.ItemsSource as ObservableCollection<Klient_Rezerwacja>;
                
                    // Tworzenie obiektu do tabeli Klient_rezerwacj
                    Klient_Rezerwacja kr = new Klient_Rezerwacja();
                    Rezerwacja rezerwacja = this.DataContext as Rezerwacja;
                    StatusBL statusBL = new StatusBL();

                    kr.Id_klient = wdk.Klient.Id_klient;
                    kr.Klient.Id_klient = wdk.Klient.Id_klient;
                    kr.Klient = wdk.Klient;
                    kr.Id_rezerwacja = rezerwacja.Id_rezerwacja;
                    kr.Id_status = wdk.Status.Id_status;
                    // Pobieranie statusu
                    kr.Status = wdk.Status ;

                    klienciRezerwacja.Add(kr);

                    dataGridListaKlientow.ItemsSource = klienciRezerwacja;
            }
        }

        private void btnDodajIstniejacegoKlienta_Click(object sender, RoutedEventArgs e)
        {
            windowListaKlientow wlk = new windowListaKlientow();
            wlk.inicjalizujZawartosc();

            wlk.ShowDialog();

            if (wlk.DialogResult.Value == true)
            {
                ObservableCollection<Klient_Rezerwacja> klienciRezerwacja = dataGridListaKlientow.ItemsSource as ObservableCollection<Klient_Rezerwacja>;

                // Sprawdzanie czy klient nieznajduje się już na liście
                bool czy_juz_jest = false;
                foreach(Klient_Rezerwacja klient in klienciRezerwacja){
                    if(klient.Klient.Id_klient == wlk.Klient.Id_klient){
                        czy_juz_jest = true;
                        MessageBox.Show("Wybrany klient znajduje się już na liście", "Uwaga", MessageBoxButton.OK, MessageBoxImage.Warning);
                        break;
                        
                    }
                }

                if (czy_juz_jest == false)
                {
                    // Tworzenie obiektu do tabeli Klient_rezerwacj
                    Klient_Rezerwacja kr = new Klient_Rezerwacja();                    
                    Rezerwacja rezerwacja = this.DataContext as Rezerwacja;
                    StatusBL statusBL = new StatusBL();

                    kr.Id_klient = wlk.Klient.Id_klient;
                    kr.Klient.Id_klient = wlk.Klient.Id_klient;
                    kr.Klient = wlk.Klient;
                    kr.Id_rezerwacja = rezerwacja.Id_rezerwacja;                    
                    kr.Id_status = wlk.Status.Id_status;
                    // Pobieranie statusu
                    kr.Status = wlk.Status;

                    klienciRezerwacja.Add(kr);

                    dataGridListaKlientow.ItemsSource = klienciRezerwacja;
                }
            }

        }

        private void buttonSzczegoly_Click(object sender, RoutedEventArgs e)
        {
            // Tworzenie obiektu nowego okna                      
            windowSzczegolyKlienta window = new windowSzczegolyKlienta();
            Klient_Rezerwacja zaznaczonyKlient = (Klient_Rezerwacja)dataGridListaKlientow.SelectedItem;

            // Przekazywanie idklienta do nowego okna
            window.inicjalizujZawartosc(zaznaczonyKlient.Klient.Id_klient);
            window.Show();
        }

        private void buttonUsun_Click(object sender, RoutedEventArgs e)
        {
            Klient_Rezerwacja klientR = dataGridListaKlientow.SelectedItem as Klient_Rezerwacja;
            klientRezerwacjaDoUsuniecia.Add(klientR);

            // Usuniecie z dataGrid
            ObservableCollection<Klient_Rezerwacja> listaKlientRezerwacja = dataGridListaKlientow.ItemsSource as ObservableCollection<Klient_Rezerwacja>;
            listaKlientRezerwacja.Remove(klientR);
            dataGridListaKlientow.ItemsSource = listaKlientRezerwacja;
        }

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            int liczba_doroslych = 0;
            int liczba_dzieci = 0;

            if (dataGridListaKlientow.Items.Count != 0 && dataGridListaKlientow != null)
            {
                ObservableCollection<Klient_Rezerwacja> listaKlientow = dataGridListaKlientow.ItemsSource as ObservableCollection<Klient_Rezerwacja>;

                foreach (Klient_Rezerwacja klient in listaKlientow)
                {
                    if (klient.Id_status == 2)
                    {
                        liczba_dzieci += 1;
                    }
                    else if (klient.Id_status == 1 || klient.Id_status == 3)
                    {
                        liczba_doroslych += 1;
                    }
                }
            }
            Rezerwacja rezerwacja = this.DataContext as Rezerwacja;
            rezerwacja.Ilosc_doroslych = liczba_doroslych;
            rezerwacja.Ilosc_dzieci = liczba_dzieci;

            tbLiczbaDoroslych.Text = liczba_doroslych.ToString();
            tbLiczbaDzieci.Text = liczba_dzieci.ToString();


        }
    }
}
